Adding Foreign Keys to a Database in Vapor
Foreign key constraints describe a link between two tables.
Example:
final class Technique: Codable {
var id : Int?
let name : String
var description: String
var heatID: Heat.ID
init(name: String, description: String, heatID: Heat.ID) {
self.name = name
self.description = description
self.heatID = heatID
}
}
Here the Technique
model needs a
Heat
ID.
To add referential integrity, we need to conform to Migrations
protocol:
extension Technique : Migration {
static func prepare(on connection: PostgreSQLConnection) -> Future<Void> {
return Database.create(self, on: connection) { builder in
try addProperties(to: builder)
// Add FOREIGN KEY reference, with ON UPDATE/DELETE CASCADE actions
try builder.addReference(from: \.heatID, to: \Heat.id, actions: .update)
// make name UNIQUE and indexed
try builder.addIndex(to: \.name, isUnique: true)
}
}
}
In the above example the relationship is one - to - many between Heat
and
Technique
.
Heat ↤⇉ Technique
And many - to - one between Technique
and
Heat
.
Technique ⇇↦ Heat
Prev: Adding Indexes and Constraints to a Database in Vapor
Next: Pre-populating a Database with Data in Vapor
#pub #db #postgresql #vapor #swift #ddl #one-to-many #many-to-one #migration